function movingCount(threshold, rows, cols)
{
    // write code here
    function getDigitSum(i,j){ // 首先定义一个函数 来获取坐标为i,j这个格子的横纵坐标的数位之和
      var res = 0
      while(i){ // 分别计算横纵坐标
        res += (i % 10) // 结果等于 原来的结果+余数
        i = Math.floor(i / 10) // 更新i的值
      }
      while(j){ // 这种方式也可以
        res += j % 10
        j = Math.floor(j / 10)
      }
      return res
    }
    // 设置一个集合的形式记录i,j是否已经被访问过
    var resArr = new Array() // 初始化储存结果的列表
    for(let m = 0;m < rows;m++){
      var resArrCols = []
      for(let n = 0;n < cols;n++){
        resArrCols.push(0)
      }
      resArr.push(resArrCols)
    } // 生成一个二维数组
    // set.add((2,3)) 这样加入的仅仅是3的值
    function dfs(i,j){
      if(i < 0 || j < 0 || i >= rows || j >= cols || getDigitSum(i,j) > threshold || resArr[i][j] === 1){
        return 0 // 如果i超出了范围 或者j超出了范围 或者数位之和大于k 或者 i,j坐标在集合内 那我们就返回0
      }
      // 否认的话呢
      resArr[i][j] = 1 // 否则的话我们就把二维数组中的这个值改成1 说明已经进入了这个格子 后面会上条条件删除
      return 1 + dfs(i+1,j)+dfs(i-1,j)+dfs(i,j-1) + dfs(i,j+1) // 并且返回向右向下递归的结果 这个1是说明可以进入这个格子
    }
    return dfs(0,0) // 最后调用一下递归函数 从0,0开始
}
module.exports = {
    movingCount : movingCount
};